package com.yoda.mall.admin.config;

import com.yoda.mall.admin.auth.AdminInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * @author shawn
 * @date 2022年 11月 29日 20:04
 * 如果使用 @Configuration 注解修饰的类，并且该注解中的 proxyBeanMethods 属性的值为 true，
 * 则会为这个 bean 创建一个代理类，该代理类会拦截所有被 @Bean 修饰的方法，在拦截的方法逻辑中，会从容器中返回所需要的单例对象。
 *
 * 使用 @Component 注解修饰的类，则不会为这个 bean 创建一个代理类。
 * 那么我们就会直接执行用户的方法，所以每次都会返回一个新的对象。
 *
 * 如果将 @Configuration 注解中的 proxyBeanMethods(默认为true) 属性的值设置为 false，
 * 那么它的行为就会跟 @Component 注解一样。所以最大区别其实就是，一个使用了单例模式一个没有
 */
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {

    @Resource
    private AdminInterceptor adminInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(adminInterceptor).addPathPatterns("/**").excludePathPatterns("/admin/login","/admin/parseToken/*","/error","/admin/logout","/aliyun/oss/upload");
    }
}
